package com.LC._155;

// class MinStack {
//     int min = Integer.MAX_VALUE;
//     Stack<Integer> stack = new Stack<Integer>();
//     public void push(int x) {
//         if(x <= min){ //劫持 获取最小值
//             stack.push(min);
//             min=x;
//         }
//         stack.push(x);
//     }
//     public void pop() {//万一删了最小值
//         if(stack.pop() == min) min=stack.pop(); //保存最小值在他被删除前
//     }
//     public int top() {
//         return stack.peek(); //获取站顶元素
//     }
//     public int getMin() { //获取最小值
//         return min;
//     }
// }

////////////////////////////////////////////////////////////////////////
// public class MinStack {

//     // 数据栈
//     private Stack<Integer> data;
//     // 辅助栈
//     private Stack<Integer> helper;

//     public MinStack() {
//         data = new Stack<>();
//         helper = new Stack<>();
//     }

//     // 思路 1：数据栈和辅助栈在任何时候都同步(stack的长度也要同步)

//     public void push(int x) {
//         // 数据栈和辅助栈一定会增加元素
//         data.add(x);
//         if (helper.isEmpty() || helper.peek() >= x) { //确保添加的为最小值
//             helper.add(x); //
//         } else {
//             helper.add(helper.peek()); //同步所需  //就是不能添加比peek大的值
//         }
//     }

//     public void pop() {
//         // 两个栈都得 pop
//         if (!data.isEmpty()) {
//             helper.pop();
//             data.pop();
//         }
//     }

import java.util.Stack;

//     public int top() {
//         if(!data.isEmpty()){
//             return data.peek();//
//         }
//         throw new RuntimeException("栈中元素为空，此操作非法");
//     }
//     public int getMin() {
//         if(!helper.isEmpty()){
//             return helper.peek();//
//         }
//         throw new RuntimeException("栈中元素为空，此操作非法");
//     }
// }
////////////////////////////////////////////////////////////////////////////
class MinStack {
    // 数据栈
    private Stack<Integer> data;
    // 辅助栈
    private Stack<Integer> helper;
    public MinStack() {
        data = new Stack<>();
        helper = new Stack<>();
    }
    public void push(int val) {
        data.push(val);
        //忘记判断为空的条件
        if(helper.isEmpty()==true|| helper.peek()>val){
            helper.push(val);
        }else{
            helper.push(helper.peek());
        }

    }

    public void pop() {
        data.pop();
        helper.pop();
    }

    public int top() {
        //忘记判断为空的状态
        return data.peek();
    }

    public int getMin() {
        //忘记判断为空的状态
        return helper.peek();
    }
}
